package com.caiheng.api.entity.product;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.caiheng.api.entity.platform.PlatformSplit;
import com.caiheng.api.entity.dto.FromatDetailDto;
import com.caiheng.api.entity.dto.ProductFormatDto;
import com.caiheng.api.entity.dto.ProductImgDto;
import com.caiheng.api.entity.estate.Estate;
import com.caiheng.api.entity.mer.Mer;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;

/**
 * 商品对象 product
 *
 * @author ruoyi
 * @date 2021-08-11
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("product")
public class Product implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 商品id
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;

    /**
     *  商品编号
     */
    private String productNo;

    /** 服务商家id */
    private Integer merId;

    /**
     * 商品图片
     */
    private String image;

    /**
     * 轮播图
     */
    private String sliderImage;

    /**
     * 是否是积分商品 0 - 普通商品 1 - 积分商品
     */
    private Integer isIntegral;

    /**
     * 商品名称
     */
    private String storeName;

    /**
     * 商品简介
     */
    private String storeInfo;

    /**
     *  是否是易货商品  0 - 不是  1 - 是
     */
//    private Integer isBarter;

    /**
     * 关键字
     */
    private String keyword;

    /**
     * 产品条码（一维码）
     */
    private String barCode;

    /**
     * 分类id
     */
    private Integer cateId;

    private Integer ruleId;

    /**
     *  消费券id
     */
    private Integer voucherId;
    /**
     *  展示的价格
     */
    private String labelPrice;

    /**
     * 商品价格
     */
    private BigDecimal price;

    /**
     * 是否是会员特价 0 - 不是  1 - 是
     */
    private Integer isVip;

    /**
     * 会员价格
     */
    private BigDecimal vipPrice;

    /**
     * 市场价
     */
    private BigDecimal otPrice;

    /**
     * 邮费
     */
    private BigDecimal postage;

    /**
     * 单位名
     */
    private String unitName;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 销量
     */
    private Integer sales;

    /**
     * 库存
     */
    private Integer stock;

    /**
     * 是否是销售类型的商品或服务  0 - 咨询类型 1 - 销售类型
     */
    private Integer isSale;

    /**
     * 状态（0：未上架，1：上架）
     */
    private Integer isShow;

    /**
     * 是否热卖
     */
    private Integer isHot;

    /**
     * 是否优惠
     */
    private Integer isBenefit;

    /**
     * 是否精品
     */
    private Integer isBest;

    /**
     * 是否新品
     */
    private Integer isNew;

    /**
     * 是否是折扣券
     */
    private Integer isCoupon;

    /**
     * 是否可使用积分抵扣
     */
    private Integer isUseIntegral;


    /**
     * 是否是 有活动期限的商品 0 - 不是  1 - 是
     */
    private Integer isActive;

    /**
     *  是否可以使用金豆抵扣
     */
    private Integer isCanUseGolden;


    /**
     * 活动开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date activeBeginTime;

    /**
     * 活动结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date activeEndTime;

    /**
     * 产品描述
     */
    private String description;

    /**
     * 添加时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    /**
     * 是否 限购
     */
    private Integer isLimit;

    /**
     * 限购数量
     */
    private Integer limitCount;


    /**
     * 是否包邮
     */
    private Integer isPostage;

    /**
     * 是否删除
     */
    private Integer isDel;

    /**
     * 商户是否代理 0不可代理1可代理
     */
    private Integer merUse;

    /**
     * 获得积分
     */
    private BigDecimal giveIntegral;

    /**
     * 成本价
     */
    private BigDecimal cost;

    /**
     * 是否优品推荐
     */
    private Integer isGood;

    /**
     * 虚拟销量
     */
    private Integer ficti;

    /**
     * 浏览量
     */
    private Long browse;

    /**
     * 是否单独分佣
     */
    private Integer isSub;

    /**
     * 分佣方式  0 - 按固定金额  1 - 按售价的比例
     */
    private Integer subType;
    /**
     * 运费模板ID
     */
    private Long tempId;

    /**
     * 规格 0单 1多
     */
    private Integer specType;

    private BigDecimal splitMoney;

    private String splitType;

    private Integer splitTypeId;

    private BigDecimal proprietorRate;

    private BigDecimal propertyRate;

    private BigDecimal platformRate;

    //是否需要预约
    private Integer isAppointment;

    //是否是需要上门
    private Integer isVisit;

    //二维码
    private String qrCode;

    //购买须知
    private String buyingTips;

    /**
     *  是否需要核销  0 - 不需要 1 - 需要
     */
    private Integer isNeedVerify;

    /**
     *  是否已售罄  0 - 未售罄  1 - 已售罄
     */
    private Integer isSaleOut;


    /**
     * 是否是平台自营商品 0 - 平台自营 1 - 小区服务
     */
    private Integer isPlatform;


    /**
     * 是否需要绑定手机号后才能购买 0 - 不需要 1 - 需要
     */
    private Integer isNeedPhone;
    /**
     * 是否需要绑定小区后才能购买 0 - 不需要 1 - 需要
     */
    private Integer isNeedEstate;



//    private Integer isAddWarmHeart;




    @TableField(exist = false)
	private List<String> sliderImageArray;

	@TableField(exist = false)
	private String sliderImagePath;

	//属性项目
	@TableField(exist = false)
	private List<FromatDetailDto> items;

	@TableField(exist = false)
	private ProductRule rule;

	@TableField(exist = false)
    private Integer totalCount;


    @TableField(exist = false)
    private Integer isShowSplit;

	//sku结果集
	@TableField(exist = false)
	private List<ProductFormatDto> attrs;

	@TableField(exist = false)
	private List<ProductAttr> productAttr;

	@TableField(exist = false)
	private Map<String, ProductAttrValue> productValue = new HashMap<>();

	@TableField(exist = false)
    private Integer sectionId;

    @TableField(exist = false)
    private List<PlatformSplit> splits;

	@TableField(exist = false)
	private List<Estate> estates;

	@TableField(exist = false)
	private List<Integer> estateIds;

    @TableField(exist = false)
    private Mer mer;

    @TableField(exist = false)
    private String[] activeDateRange;

    @TableField(exist = false)
    private String activeTime;

    @TableField(exist = false)
    private List<ProductImgDto> productImgs;

    @TableField(exist = false)
    private List<ProductImgDto> sliderImgs;

    @TableField(exist = false)
    private ProductCart productCart;

}
